package cn.rocky.structures.linked_list;

/**
 * List接口
 * 1.描述一下链表的数据结构？
 * 2.Java 中 LinkedList 使用的是单向链表、双向链表还是循环链表？
 * 3.链表中数据的插入、删除、获取元素，时间复杂度是多少？
 * 4.什么场景下使用链表更合适？
 */
public interface List<E> {

    boolean add(E e);

    boolean addFirst(E e);

    boolean addLast(E e);

    /**
     *  1.删除元素的过程需要 for 循环判断比删除元素的值，找到对应的元素，进行删除。
     *  2.循环比对的过程是一个 O(n) 的操作，删除的过程是一个 O(1) 的操作。
     *  所以如果这个链表较大，删除的元素又都是贴近结尾，那么这个循环比对的过程也是比较耗时的。
     *
     * @param o
     * @return
     */
    boolean remove(Object o);

    E get(int index);

    void printLinkList();
}
